import DataBus from '../databus.js'

/**
 * 测试平局条件功能
 */
export default class DrawConditionTest {
  constructor() {
    this.databus = new DataBus()
  }

  /**
   * 测试空棋盘不是平局
   */
  testEmptyBoardNotDraw() {
    console.log('测试空棋盘不是平局...')
    this.databus.initBoard()
    const isDraw = this.databus.checkDraw()
    console.assert(!isDraw, '空棋盘应该是false，但得到:', isDraw)
    console.log('✓ 空棋盘不是平局')
  }

  /**
   * 测试部分填充的棋盘不是平局
   */
  testPartialBoardNotDraw() {
    console.log('测试部分填充的棋盘不是平局...')
    this.databus.initBoard()
    
    // 填充部分棋盘
    for (let i = 0; i < 10; i++) {
      for (let j = 0; j < 10; j++) {
        this.databus.board[i][j] = 1
      }
    }
    
    const isDraw = this.databus.checkDraw()
    console.assert(!isDraw, '部分填充的棋盘应该是false，但得到:', isDraw)
    console.log('✓ 部分填充的棋盘不是平局')
  }

  /**
   * 测试完全填充的棋盘是平局
   */
  testFullBoardIsDraw() {
    console.log('测试完全填充的棋盘是平局...')
    this.databus.initBoard()
    
    // 填充整个棋盘
    for (let i = 0; i < 15; i++) {
      for (let j = 0; j < 15; j++) {
        this.databus.board[i][j] = 1
      }
    }
    
    const isDraw = this.databus.checkDraw()
    console.assert(isDraw, '完全填充的棋盘应该是true，但得到:', isDraw)
    console.log('✓ 完全填充的棋盘是平局')
  }

  /**
   * 测试混合填充的棋盘是平局
   */
  testMixedFullBoardIsDraw() {
    console.log('测试混合填充的棋盘是平局...')
    this.databus.initBoard()
    
    // 混合填充整个棋盘
    for (let i = 0; i < 15; i++) {
      for (let j = 0; j < 15; j++) {
        this.databus.board[i][j] = (i + j) % 2 === 0 ? 1 : 2
      }
    }
    
    const isDraw = this.databus.checkDraw()
    console.assert(isDraw, '混合填充的棋盘应该是true，但得到:', isDraw)
    console.log('✓ 混合填充的棋盘是平局')
  }

  /**
   * 测试边界情况
   */
  testEdgeCases() {
    console.log('测试边界情况...')
    this.databus.initBoard()
    
    // 填充除了一个位置的所有位置
    for (let i = 0; i < 15; i++) {
      for (let j = 0; j < 15; j++) {
        if (!(i === 14 && j === 14)) { // 留一个空位
          this.databus.board[i][j] = 1
        }
      }
    }
    
    const isDraw = this.databus.checkDraw()
    console.assert(!isDraw, '还有一个空位的棋盘应该是false，但得到:', isDraw)
    console.log('✓ 还有一个空位的棋盘不是平局')
    
    // 填充最后一个位置
    this.databus.board[14][14] = 2
    const isDrawAfterFill = this.databus.checkDraw()
    console.assert(isDrawAfterFill, '完全填充的棋盘应该是true，但得到:', isDrawAfterFill)
    console.log('✓ 填充最后一个位置后是平局')
  }

  /**
   * 运行所有测试
   */
  runAllTests() {
    console.log('开始平局条件测试...')
    console.log('=' * 50)
    
    try {
      this.testEmptyBoardNotDraw()
      this.testPartialBoardNotDraw()
      this.testFullBoardIsDraw()
      this.testMixedFullBoardIsDraw()
      this.testEdgeCases()
      
      console.log('=' * 50)
      console.log('✓ 所有平局条件测试通过！')
      return true
    } catch (error) {
      console.error('✗ 平局条件测试失败:', error)
      return false
    }
  }
}

// 如果直接运行此文件
if (typeof window !== 'undefined' || typeof GameGlobal !== 'undefined') {
  const test = new DrawConditionTest()
  test.runAllTests()
} 